package chances.wechat.api;

import java.io.File;
import java.util.List;

import fastweixin.api.enums.ResultType;
import fastweixin.api.response.BaseResponse;
import fastweixin.util.BeanUtil;
import fastweixin.util.CollectionUtil;
import fastweixin.util.NetWorkCenter;

/**
 * API鍩虹被锛屾彁渚涗竴浜涢�氱敤鏂规硶 鍖呭惈鑷姩鍒锋柊token銆侀�氱敤get post璇锋眰绛�
 *
 * @author peiyu
 * @since 1.2
 */
public abstract class BaseAPI {

    protected static final String BASE_API_URL = "https://api.weixin.qq.com/";

    protected String accessToken = "";

    protected String appId = "";

    protected String secret = "";

    public BaseAPI() {
    }

    public BaseAPI(String token) {
        this.accessToken = token;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    /**
     * 通用post请求
     *
     * @param url
     *            地址，其中token用#代替
     * @param json
     *            参数，json格式
     * @return 请求结果
     */
    protected BaseResponse executePost(String url, String json) {
        return executePost(url, json, null);
    }

    /**
     * 通用post请求
     *
     * @param url
     *            地址，其中token用#代替
     * @param json
     *            参数，json格式
     * @param file
     *            上传的文件
     * @return 请求结果
     */
    @SuppressWarnings("unchecked")
    protected BaseResponse executePost(String url, String json, File file) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");
        List<File> files = null;
        if (null != file) {
            files = CollectionUtil.newArrayList(file);
        }
        // 需要传token
        String postUrl = url.replace("#", accessToken);
        response = NetWorkCenter.post(postUrl, json, files);
        return response;
    }

    /**
     * 通用get请求
     *
     * @param url
     *            地址，其中token用#代替
     * @return 请求结果
     */
    protected BaseResponse executeGet(String url) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");
        // 需要传token
        String getUrl = url.replace("#", accessToken);
        response = NetWorkCenter.get(getUrl);
        return response;
    }

    /**
     * 判断本次请求是否成功
     *
     * @param errCode
     *            错误码
     * @return 是否成功
     */
    protected boolean isSuccess(String errCode) {
        return ResultType.SUCCESS.getCode().toString().equals(errCode);
    }

}
